package eu.telecom_bretagne.RECRUT.demo;

import java.sql.Date;
import java.util.GregorianCalendar;

import javax.naming.InitialContext;
import javax.naming.NamingException;

import eu.telecom_bretagne.RECRUT.data.model.Entretien;
import eu.telecom_bretagne.RECRUT.service.IServiceEntretien;

public class AppelServiceEntretien {

	public static void main(String[] args) {

		test_listeEntretiens();

		test_modifierEntretien();
		test_lireEntretien();

		test_creerEntretien();
		test_listeEntretiens();
		
		test_supprimerEntretien(1);
		test_listeEntretiens();

	}

	public static IServiceEntretien getServiceEntretien() {

		InitialContext ctx;
		IServiceEntretien serviceEntretien = null;
		try {

			ctx = new InitialContext();
			serviceEntretien = (IServiceEntretien) ctx
					.lookup(IServiceEntretien.JNDI_NAME);
		} catch (NamingException e) {

			// Unable to retrieve the context or the service
			e.printStackTrace();
			System.exit(-1);
		}
		return serviceEntretien;
	}

	public static void test_listeEntretiens() {

		for (Entretien entretien : getServiceEntretien().listeEntretiens()) {
			System.out.println("Entretien id:" + entretien.getId() + " date:"
					+ entretien.getDateEntretien());
		}
	}

	public static void test_lireEntretien() {

		Entretien entretien = getServiceEntretien().lireEntretien(1);
		System.out.println("Entretien id=1 date:"
				+ entretien.getDateEntretien());
	}

	public static void test_modifierEntretien() {

		getServiceEntretien().modifierEntretien(1,
				convertNumericToDate(20150324));

	}

	public static void test_creerEntretien() {

		getServiceEntretien().creerEntretien(convertNumericToDate(20142502), 1);
	}
	
	public static void test_supprimerEntretien(int id){
		
		getServiceEntretien().supprimerEntretien(id);
	}

	/**
	 * Méthode de conversion d'un Integer de type <code>AAAAMMJJ</code> en la
	 * date correspondante.
	 * 
	 * @param dateNumeric
	 *            Entier représentant la date au format <code>AAAAMMJJ</code>.
	 *            Si la date en entrée ne respecte pas les jours et les mois de
	 *            l'année, il n'y a pas de plantage; les jours et les mois sont
	 *            ajoutés à la date. Exemple <code>20100230</code> renverra le
	 *            <code>2 mars 2010</code>.
	 * @return La {@link Date date} correspondante. <code>null</code> si le
	 *         numérique est <code>null</code> ou égale à 0 ou pas dans le
	 *         format attendu.
	 */
	public final static Date convertNumericToDate(Integer dateNumeric) {
		GregorianCalendar calendar = new GregorianCalendar();
		Date date = null;
		// Si la date est au bon format
		if (dateNumeric != null && dateNumeric != 0
				&& dateNumeric.toString().length() == 8) {
			String dateString = dateNumeric.toString();
			calendar.clear();
			calendar.set(Integer.parseInt(dateString.substring(0, 4)),
					Integer.parseInt(dateString.substring(4, 6)),
					Integer.parseInt(dateString.substring(6, 8)));
			date = new Date(calendar.getTimeInMillis());
		}
		return date;
	}

}
